#pragma once
#include<iostream>
#include<string>

std::string opers="+-*%";
enum
{
    DivZero=1,
    ModZero
};
class Task
{
public:
    Task(int x,int y,char op):
    data1_(x),data2_(y),oper_(op),result(0),exitcode(0)
    {}
    void run()
    {
        switch(oper_)
        {
        case '+':
            result=data1_ + data2_;
            /* code */
            break;
        case '-':
            result=data1_ - data2_;
            break;
        case '*':
            result= data1_ * data2_;
            break;
        case '/':
            if(data2_==0)
                exitcode=DivZero;
            else result= data1_ / data2_;
            break;
        case '%':
            if(data2_==0)
            {
                exitcode=ModZero;
            }
            else
                result=data1_ % data2_;
            break;
        default:
            break;
        }
    }


    std::string GetResult()
    {
        std::string r= std::to_string(data1_);
        r+=oper_;
        r+=std::to_string(data2_);
        r+= "=";
        r+=std::to_string(result);
        r+=" [code: ";
        r+=std::to_string(exitcode);
        r+="]";
        return r;
    }
    std::string GetTask()
    {
        std::string r=std::to_string(data1_);
        r+=oper_;
        r+=std::to_string(data2_);
        r+="=?";
        return r;
    }
    ~Task()
    {

    }
private:
    int data1_;
    int data2_;

    char oper_;//符号选择
    int result;
    int exitcode;
};